JasmineJS এ Spy একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ফাংশনের কল ট্র্যাক করতে, তার আর্গুমেন্ট পরীক্ষা করতে এবং নির্দিষ্ট আচরণ নিশ্চিত করতে সহায়তা করে। এটি মূলত সেই পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একটি নির্দিষ্ট ফাংশন বা মেথডের কার্যকারিতা পরীক্ষা করতে চান, তবে আপনি মূল কোডে কোনো পরিবর্তন না এনে শুধুমাত্র কল ট্র্যাক করতে চান।
Spy কি?
JasmineJS এ Spy হল এমন একটি ফাংশন যা আপনার কোডের অংশ হিসেবে কল ট্র্যাক করার জন্য ব্যবহৃত হয়। এটি মূলত টেস্টের মধ্যে কোনও ফাংশন বা মেথডের কার্যক্রম নজরদারি করতে পারে, তার আর্গুমেন্ট, রিটার্ন ভ্যালু এবং কল হওয়ার সংখ্যা পরীক্ষা করতে পারে।
Spy তৈরি করার পদ্ধতি
JasmineJS এ দুটি প্রধান পদ্ধতিতে Spy তৈরি করা যায়:
- জেনুইন স্পাই (Spy On): এটি মূলত কোনো একটি মেথড বা ফাংশন ট্র্যাক করতে ব্যবহৃত হয়। আপনি একটি অবজেক্টের মেথডের উপর স্পাই করতে পারেন, এবং এটি মূল ফাংশনের আচরণ পরিবর্তন না করেই কল ট্র্যাক করতে সাহায্য করে।
- স্পাই ফাংশন (Spy Function): আপনি একটি সম্পূর্ণ নতুন স্পাই ফাংশন তৈরি করতে পারেন যা টেস্টের মধ্যে কোনো নির্দিষ্ট কার্যকলাপ সিমুলেট করে।
Spy On ব্যবহার করা
spyOn() ফাংশনটি একটি মেথডকে স্পাই করে এবং ট্র্যাক করে, তবে এটি মূল মেথডের আচরণ পরিবর্তন করে না। এটি সাধারণত কোন অবজেক্টের ফাংশন বা মেথড ট্র্যাক করতে ব্যবহার হয়।
সিনট্যাক্স:
spyOn(object, "methodName");
এখানে:
object: যেই অবজেক্টের মেথডকে স্পাই করতে চান।methodName: যেই মেথডটি ট্র্যাক করতে চান।
উদাহরণ:
describe("Calculator operations", function() {
it("should call the add method with correct arguments", function() {
const calculator = {
add: function(a, b) { return a + b; }
};
spyOn(calculator, 'add'); // 'add' মেথডটি স্পাই করা হলো
calculator.add(2, 3); // মেথড কল করা হলো
expect(calculator.add).toHaveBeenCalled(); // মেথড কল হয়েছে কিনা তা পরীক্ষা
expect(calculator.add).toHaveBeenCalledWith(2, 3); // কল করার সময় সঠিক আর্গুমেন্ট দেয়া হয়েছে কিনা তা পরীক্ষা
});
});
এখানে:
spyOn(calculator, 'add'):calculatorঅবজেক্টেরaddমেথডটি স্পাই করা হয়েছে।calculator.add(2, 3):addমেথডটি কল করা হয়েছে।expect(calculator.add).toHaveBeenCalled(): নিশ্চিত করা হয়েছে যেaddমেথডটি কল হয়েছে।expect(calculator.add).toHaveBeenCalledWith(2, 3): নিশ্চিত করা হয়েছে যে কল করার সময় সঠিক আর্গুমেন্ট দেয়া হয়েছে।
Spy ফাংশন তৈরি করা
JasmineJS এ আপনি একটি স্পাই ফাংশন তৈরি করতে পারেন যা একটি নতুন ফাংশনের মতো কাজ করবে এবং কল হওয়া ট্র্যাক করবে। এর মাধ্যমে আপনি যেকোনো ফাংশনের আচরণ পরীক্ষায় সহায়তা করতে পারেন।
সিনট্যাক্স:
const spyFunction = jasmine.createSpy("functionName");
উদাহরণ:
describe("Spy function example", function() {
it("should track function calls", function() {
const spyFunc = jasmine.createSpy("spyFunc"); // স্পাই ফাংশন তৈরি
spyFunc(1, 2); // ফাংশন কল করা হলো
spyFunc(3, 4); // আবার কল করা হলো
expect(spyFunc).toHaveBeenCalled(); // ফাংশনটি কল হয়েছে কিনা তা পরীক্ষা
expect(spyFunc).toHaveBeenCalledWith(1, 2); // সঠিক আর্গুমেন্ট দিয়ে কল হয়েছে কিনা তা পরীক্ষা
expect(spyFunc).toHaveBeenCalledTimes(2); // ফাংশনটি দুইবার কল হয়েছে কিনা তা পরীক্ষা
});
});
এখানে:
jasmine.createSpy(): একটি নতুন স্পাই ফাংশন তৈরি করা হয়েছে যা ফাংশনটির কল ট্র্যাক করবে।expect(spyFunc).toHaveBeenCalled(): নিশ্চিত করা হয়েছে যে স্পাই ফাংশনটি কল হয়েছে।expect(spyFunc).toHaveBeenCalledWith(1, 2): নিশ্চিত করা হয়েছে যে সঠিক আর্গুমেন্ট দিয়ে কল করা হয়েছে।expect(spyFunc).toHaveBeenCalledTimes(2): নিশ্চিত করা হয়েছে যে ফাংশনটি মোট দুইবার কল হয়েছে।
Spy এর সাথে Return Value নির্ধারণ করা
Spy দিয়ে আপনি return value বা কাস্টম আচরণও সেট করতে পারেন। এতে আপনি স্পাই ফাংশনের মাধ্যমে কাস্টম রিটার্ন ভ্যালু অথবা ফাংশন কলের পরে নির্দিষ্ট আচরণ কনফিগার করতে পারেন।
উদাহরণ:
describe("Spy return value example", function() {
it("should return a custom value when called", function() {
const spyFunc = jasmine.createSpy("spyFunc").and.returnValue(10); // স্পাই ফাংশন তৈরি এবং কাস্টম রিটার্ন ভ্যালু সেট করা
const result = spyFunc();
expect(spyFunc).toHaveBeenCalled(); // স্পাই ফাংশন কল হয়েছে কিনা তা পরীক্ষা
expect(result).toBe(10); // কাস্টম রিটার্ন ভ্যালু ১০ এসেছে কিনা তা পরীক্ষা
});
});
এখানে:
and.returnValue(10): স্পাই ফাংশনের রিটার্ন ভ্যালু ১০ হিসেবে সেট করা হয়েছে।expect(result).toBe(10): রিটার্ন ভ্যালু যাচাই করা হয়েছে যে এটি ১০ কিনা।
Spy এর সাথে Throwing Error নির্ধারণ
আপনি স্পাই ফাংশন দিয়ে Error ফেলা (throw) বা exception সেট করতে পারেন। এর মাধ্যমে আপনি একটি ফাংশনের ত্রুটি মোকাবেলা এবং পরীক্ষা করতে পারবেন।
উদাহরণ:
describe("Spy throwing error example", function() {
it("should throw an error when called", function() {
const spyFunc = jasmine.createSpy("spyFunc").and.throwError("Something went wrong");
expect(spyFunc).toThrowError("Something went wrong"); // স্পাই ফাংশনটি ত্রুটি ফেলবে কিনা তা পরীক্ষা
});
});
এখানে:
and.throwError("Something went wrong"): স্পাই ফাংশনটি কল হওয়ার সাথে সাথে একটি ত্রুটি (error) ফেলবে।expect(spyFunc).toThrowError("Something went wrong"): নিশ্চিত করা হয়েছে যে স্পাই ফাংশনটি সঠিক ত্রুটি ফেলছে।
সারাংশ
JasmineJS এর Spy ফিচারটি একটি শক্তিশালী টেস্টিং টুল, যা দিয়ে আপনি ফাংশনের কল ট্র্যাক করতে, তার আর্গুমেন্ট পরীক্ষা করতে এবং ফাংশনের আচরণ কাস্টমাইজ করতে পারেন। spyOn() মেথডটি অবজেক্টের মেথড স্পাই করতে ব্যবহৃত হয়, এবং jasmine.createSpy() ব্যবহার করে আপনি কাস্টম স্পাই ফাংশন তৈরি করতে পারেন।
এই টুলটি বিশেষভাবে দরকারি যখন আপনি মডিউল বা ফাংশনের আচরণ পরীক্ষা করতে চান, কিন্তু তার বাস্তব কার্যকারিতা পরিবর্তন না করে শুধু তার কল ট্র্যাক করতে চান।
Read more